101. 对称二叉树
101. 对称二叉树
Similar Question
leading to the advanced question
Solution Tips
方案一: 递归
var isSymmetric = function(root) {
// 可以理解成每一层节点都是回文的, 用层次遍历来做
// 如果是用递归来做的话, 就是优先左遍历和优先右遍历结果是一样的
// 但是这是对于整一个子树来说, 而不能递归到子树的子树上
// 所以为了整体可以对比, 得在外面维护一个数组, 每 push 两个元素对比一次
// 这种方案本质上还是迭代
// 同时递归遍历两个节点的方法就是同时传入两个节点
if (root === null) return null;
return traversal(root.left, root.right)
function traversal(n, m) {
if (m.key !== m.key) return false;
return traversal(n.left, m.right) && traversal(n.right, m.left);
}
};
方案二: 迭代
const check = (u: TreeNode | null, v: TreeNode | null): boolean => {
const q: (TreeNode | null)[] = [];
q.push(u),q.push(v);
while (q.length) {
u = q.shift()!;
v = q.shift()!;
if (!u && !v) continue;
if ((!u || !v) || (u.val !== v.val)) return false;
q.push(u.left);
q.push(v.right);
q.push(u.right);
q.push(v.left);
}
return true;
}
var isSymmetric = function(root: TreeNode | null): boolean {
return check(root, root);
};